home *** CD-ROM | disk | FTP | other *** search
- /* act.c - action by palette rotation.
- (c)1989 by Stephen P. Clark */
-
- #include <stdio.h>
- #include <graph.h>
- #include <conio.h>
- #define EGARGB(r,g,b) (0x3F3F3FL & ((long)(b) << 20 | (g) <<12 | (r << 4)))
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- FILE *fp,*fopen();
- char line[200],*lptr;
- short i,j,c1,c2,k,red,green,blue;
- long int pal[16],temp_palet;
-
- if(argc != 2)
- {
- printf("Usage: act <filename>\n\n");
- printf("Produces action by palette rotation.\n");
- printf("By Stephen P. Clark 1989.\n");
- exit(0);
- }
- if((fp=fopen(argv[argc-1],"rb"))==NULL)
- {
- printf("Can't open %s\n",argv[argc-1]);
- exit(0);
- }
- fread(line,2,1,fp); /* read file ID information */
- if(line[0] != 0 || line[1] != 0)
- {
- printf("Not a valid file\n");
- exit(0);
- }
- if(_setvideomode(_MRES16COLOR) == 0)
- {
- printf("This is not an EGA or VGA display.\n");
- exit(0);
- }
-
- fread(line,16,1,fp); /* read in palette information */
- for(i=0; i < 16; )
- {
- red = ((line[i] & 0x04) >> 2) + ((line[i] & 0x20) >> 4);
- green = ((line[i] & 0x02) >> 1) + ((line[i] & 0x10) >> 3);
- blue = (line[i] & 0x01) + ((line[i] & 0x08) >> 2);
- pal[i] = EGARGB(red,green,blue);
- i++;
- }
- _remapallpalette(&(pal[0]));
- for(i=0;i<8;i++) /* skip first 8 lines */
- fread(line,160,1,fp);
- for(i=0; i<192; i++)
- {
- fread(line,160,1,fp);
- for(k=0,j=0; k<160; k++)
- {
- c1 = (line[k] & 0xF0) >> 4;
- _setcolor(c1);
- _setpixel(j,i);
- j++;
- c2 = (line[k] & 0x0F);
- _setcolor(c2);
- _setpixel(j,i);
- j++;
- }
- }
- fclose(fp);
- do{
- temp_palet = pal[15];
- for(i=15; i>8; )
- {
- pal[i] = pal[i-1];
- _remappalette(i,pal[i]);
- i--;
- }
- pal[8] = temp_palet;
- _remappalette(i,pal[8]);
- } while(kbhit() == 0);
- _setvideomode(_DEFAULTMODE);
- }
-
-